!-------------------------------------------------------------LICENSE--------------------------------------------------------------!
!                                                                                                                                  !
!The MAP code is written in Fortran language for magnetohydrodynamics (MHD) calculation with the adaptive mesh refinement (AMR)    !
!and Message Passing Interface (MPI) parallelization.                                                                              !
!                                                                                                                                  !
!Copyright (C) 2012                                                                                                                !
!Ronglin Jiang                                                                                                                     !
!rljiang@ssc.net.cn                                                                                                                !
!585 Guoshoujing Road. Pudong, Shanghai, P.R.C. 201203                                                                             !
!                                                                                                                                  !
!This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License         !
!as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.             !
!                                                                                                                                  !
!This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of    !
!MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.                        !
!                                                                                                                                  !
!You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software     !
!Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.                                                   !
!                                                                                                                                  !
!-------------------------------------------------------------LICENSE--------------------------------------------------------------!

module interfaces
   interface

!----------------------------------------------------------------------------------------------------------------------------------------------|

      subroutine amr(base)
         use parameters
         use block_define
         implicit none
         type(block), pointer, intent(inout) :: base
      end subroutine amr

!----------------------------------------------------------------------------------------------------------------------------------------------|

      recursive subroutine block_boundary (current)
         use parameters
         use block_define
         implicit none
         type(block), pointer, intent(inout) :: current
      end subroutine block_boundary

!----------------------------------------------------------------------------------------------------------------------------------------------|

      recursive subroutine block_destroy (current)
         use parameters
         use block_define
         implicit none
         type(block), pointer, intent(inout) :: current
      end subroutine block_destroy

!----------------------------------------------------------------------------------------------------------------------------------------------|

      recursive subroutine block_generate (current)
         use parameters
         use block_define
         implicit none
         type(block), pointer, intent(inout) :: current
      end subroutine block_generate

!----------------------------------------------------------------------------------------------------------------------------------------------|

      recursive subroutine block_info (current)
         use parameters
         use block_define
         implicit none
         type(block), pointer, intent(inout) :: current
      end subroutine block_info

!----------------------------------------------------------------------------------------------------------------------------------------------|

      recursive subroutine block_output (current)
         use parameters
         use block_define
         implicit none
         type(block), pointer, intent(in) :: current
      end subroutine block_output

!----------------------------------------------------------------------------------------------------------------------------------------------|

      recursive subroutine integrate (current)
         use parameters
         use block_define
         implicit none
         type(block), pointer, intent(inout) :: current
      end subroutine integrate

!----------------------------------------------------------------------------------------------------------------------------------------------|

      subroutine model_initial (base)
         use parameters
         use block_define
         implicit none
         type(block), pointer, intent(inout) :: base
      end subroutine model_initial

!----------------------------------------------------------------------------------------------------------------------------------------------|

      recursive subroutine regrid (current)
         use parameters
         use block_define
         implicit none
         type(block), pointer, intent(inout) :: current
      end subroutine regrid

!----------------------------------------------------------------------------------------------------------------------------------------------|

   end interface
end module interfaces

!!==============================================================================================================================================|
!module interface_amr
!!==============================================================================================================================================|

!   interface

!      subroutine amr(base)

!         use parameters
!         use block_define
!         implicit none

!         type(block), pointer, intent(inout) :: base

!      end subroutine amr

!   end interface

!end module interface_amr
!!----------------------------------------------------------------------------------------------------------------------------------------------|

!!==============================================================================================================================================|
!module interface_block_boundary
!!==============================================================================================================================================|

!   interface

!      recursive subroutine block_boundary (current)

!         use parameters
!         use block_define
!         implicit none

!         type(block), pointer, intent(inout) :: current

!      end subroutine block_boundary

!   end interface

!end module interface_block_boundary
!!----------------------------------------------------------------------------------------------------------------------------------------------|

!!==============================================================================================================================================|
!module interface_block_destroy
!!==============================================================================================================================================|

!   interface

!      recursive subroutine block_destroy (current)

!         use parameters
!         use block_define
!         implicit none

!         type(block), pointer, intent(inout) :: current

!      end subroutine block_destroy

!   end interface

!end module interface_block_destroy
!!----------------------------------------------------------------------------------------------------------------------------------------------|

!!==============================================================================================================================================|
!module interface_block_generate
!!==============================================================================================================================================|

!   interface

!      recursive subroutine block_generate (current)

!         use parameters
!         use block_define
!         implicit none

!         type(block), pointer, intent(inout) :: current

!      end subroutine block_generate

!   end interface

!end module interface_block_generate
!!----------------------------------------------------------------------------------------------------------------------------------------------|

!!==============================================================================================================================================|
!module interface_block_info
!!==============================================================================================================================================|

!   interface

!      recursive subroutine block_info (current)

!         use parameters
!         use block_define
!         implicit none

!         type(block), pointer, intent(inout) :: current

!      end subroutine block_info

!   end interface

!end module interface_block_info
!!----------------------------------------------------------------------------------------------------------------------------------------------|

!!==============================================================================================================================================|
!module interface_integrate
!!==============================================================================================================================================|

!   interface

!      recursive subroutine integrate (current)

!         use parameters
!         use block_define
!         implicit none

!         type(block), pointer, intent(inout) :: current

!      end subroutine integrate

!   end interface

!end module interface_integrate
!!----------------------------------------------------------------------------------------------------------------------------------------------|

!!==============================================================================================================================================|
!module interface_model_initial
!!==============================================================================================================================================|

!   interface

!      subroutine model_initial (base)

!         use parameters
!         use block_define
!         implicit none

!         type(block), pointer, intent(inout) :: base

!      end subroutine model_initial

!   end interface

!end module interface_model_initial
!!----------------------------------------------------------------------------------------------------------------------------------------------|

!!==============================================================================================================================================|
!module interface_regrid
!!==============================================================================================================================================|

!   interface

!      recursive subroutine regrid (current)

!         use parameters
!         use block_define
!         implicit none

!         type(block), pointer, intent(inout) :: current

!      end subroutine regrid

!   end interface

!end module interface_regrid
!!----------------------------------------------------------------------------------------------------------------------------------------------|
